//package com.qen.wrapper.query.interfaces;
//
//import cn.hutool.core.collection.CollectionUtil;
//import com.qen.common.SqlHelper;
//import org.beetl.sql.core.page.DefaultPageRequest;
//import org.beetl.sql.core.page.PageRequest;
//import org.beetl.sql.core.page.PageResult;
//
//import java.util.List;
//import java.util.Map;
//import java.util.Optional;
//
///**
// * @author licz
// * @data 2025年06月04日 3:51 PM
// */
//public interface Chain<T> {
//
//    Class<T> getEntityClass();
//
//    boolean isResultMapCollection();
//
//    /**
//     * 链式调用 等效于MP mapper的 selectCount()
//     * <p>
//     * 构造方法必须传 class 或 entity 否则会报错 <br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default Long count() {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinCount(this));
//    }
//
//    /**
//     * 链式调用 等效于 selectOne
//     * <p>
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default T one() {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinOne(getEntityClass(), this));
//    }
//
//    /**
//     * 链式调用 等效于 selectJoinOne
//     * <p>
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default <R> R one(Class<R> resultType) {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinOne(resultType, this));
//    }
//
//    /**
//     * 链式调用 查询列表第一个 匹配多个不会抛异常
//     * <p>
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default T first() {
//        List<T> list = this.isResultMapCollection() ? list() :
//                page(DefaultPageRequest.of(0, 1, false)).getList();
//        return Optional.of(list).filter(CollectionUtil::isNotEmpty).map(m -> m.get(0)).orElse(null);
//    }
//
//    /**
//     * 链式调用 查询列表第一个 匹配多个不会抛异常
//     * <p>
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default <R> R first(Class<R> resultType) {
//        List<R> list = this.isResultMapCollection() ? list(resultType) :
//                page(DefaultPageRequest.of(0, 1, false), resultType).getList();
//        return Optional.of(list).filter(CollectionUtil::isNotEmpty).map(m -> m.get(0)).orElse(null);
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default List<T> list() {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinList(getEntityClass(), this));
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default <R> List<R> list(Class<R> resultType) {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinList(resultType, this));
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default <P extends PageRequest> PageResult page(P page) {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinPage(page, getEntityClass(), this));
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default <R, P extends PageRequest> PageResult page(P page, Class<R> resultType) {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinPage(page, resultType, this));
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default Map<String, Object> mapOne() {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinMap(this));
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default Map<String, Object> mapFirst() {
//        List<Map<String, Object>> mapList = mapPage(DefaultPageRequest.of(0, 1, false)).getList();
////        List<Map<String, Object>> mapList = mapPage(new Page<Map<String, Object>>(1, 1).setSearchCount(false)).getRecords();
//        return Optional.of(mapList).filter(CollectionUtil::isNotEmpty).map(m -> m.get(0)).orElse(null);
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default List<Map<String, Object>> mapList() {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinMaps(this));
//    }
//
//    /**
//     * 链式调用
//     * 构造方法必须传 class 或 entity 否则会报错<br />
//     * new MPJLambdaWrapper(User.class)<br />
//     * JoinWrappers.lambda(User.class)<br />
//     */
//    default <P extends PageRequest<Map>> PageResult mapPage(P page) {
//        return SqlHelper.execute(getEntityClass(), dao -> dao.selectJoinMapsPage(page, this));
//    }
//}
